#include <vtkSmartPointer.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkSphereSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
 
int main(int argc, char *argv[]) {
    // 创建一个球体源对象
    vtkSmartPointer<vtkSphereSource> sphereSource = vtkSmartPointer<vtkSphereSource>::New();
    sphereSource->SetCenter(0.0, 0.0, 0.0);
    sphereSource->SetRadius(5.0);
    sphereSource->Update(); // 需要调用Update()来生成数据
 
    // 创建一个映射器对象，将球体源映射到图形硬件上
    vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
    mapper->SetInputConnection(sphereSource->GetOutputPort());
 
    // 创建一个actor对象，将映射器添加到actor中，并设置其属性如颜色等。
    vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
    actor->SetMapper(mapper);
    // actor->GetProperty()->SetColor(1.0, 0.0, 0.0); // 设置颜色为红色
 
    // 创建一个渲染器对象，将actor添加到渲染器中。
    vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
    renderer->AddActor(actor);
    renderer->SetBackground(0.1, 0.2, 0.3); // 设置背景颜色为深蓝色
 
    // 创建一个渲染窗口对象，将渲染器添加到渲染窗口中。
    vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
    renderWindow->AddRenderer(renderer);
    renderWindow->SetSize(800, 600); // 设置窗口大小
 
    // 创建一个交互器对象，将渲染窗口和渲染器连接起来。并初始化。
    vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
    renderWindowInteractor->SetRenderWindow(renderWindow);
    renderWindow->Render(); // 显示窗口中的图像。必须在交互器初始化之后调用。
    renderWindowInteractor->Start(); // 开始交互。这将打开一个窗口并允许用户与图像交互。
}